#ifndef THREAD_POOL_H
#define THREAD_POOL_H

#include <vector>              // 用于存储工作线程
#include <queue>               // 用于实现任务队列
#include <memory>              // 智能指针
#include <thread>              // C++11线程库
#include <mutex>               // 互斥锁，保证线程安全
#include <condition_variable>  // 条件变量，用于线程通信
#include <future>              // 异步任务结果
#include <functional>          // std::function，用于封装任务
#include <stdexcept>           // 标准异常
#include <atomic>              // 原子操作，线程安全的变量

class ThreadPool {
public:
    // 构造函数，创建指定数量的工作线程
    ThreadPool(size_t threads);
    
    // 禁用拷贝构造函数和赋值操作符
    ThreadPool(const ThreadPool&) = delete;
    ThreadPool& operator=(const ThreadPool&) = delete;

    // 工作线程 - 线程池的核心逻辑
    void workerThread();
    
    // 析构函数
    ~ThreadPool();
    
private:
    // 工作线程容器
    std::vector<std::thread> workers;
    
    // 任务队列
    std::queue<std::function<void()>> tasks;
    
    // 同步机制
    std::mutex queue_mutex;
    std::condition_variable condition;
    
    // 控制线程池停止
    std::atomic<bool> stop{false};
};

#endif // THREAD_POOL_H